package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/redistribute-characters-to-make-all-strings-equal/'>重新分配字符使所有字符串都相等(Redistribute Characters to Make All Strings Equal)</a>
 * <p>给你一个字符串数组 words（下标 从 0 开始 计数）。</p>
 * <p>在一步操作中，需先选出两个 不同 下标 i 和 j，其中 words[i] 是一个非空字符串，接着将 words[i] 中的 任一 字符移动到 words[j] 中的 任一 位置上。</p>
 * <p>如果执行任意步操作可以使 words 中的每个字符串都相等，返回 true ；否则，返回 false 。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：words = ["abc","aabc","bc"]
 *      输出：true
 *      解释：将 words[1] 中的第一个 'a' 移动到 words[2] 的最前面。
 *          使 words[1] = "abc" 且 words[2] = "abc" 。
 *          所有字符串都等于 "abc" ，所以返回 true 。
 *
 * 示例 2：
 *      输入：words = ["ab","a"]
 *      输出：false
 *      解释：执行操作无法使所有字符串都相等。
 * </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= words.length <= 100</li>
 *     <li>1 <= words[i].length <= 100</li>
 *     <li>words[i] 由小写英文字母组成</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/18 16:46
 */
public class LC1897RedistributeCharactersToMakeAllStringsEqual_S {
    static class Solution {
        public boolean makeEqual(String[] words) {
            int length = words.length;
            if (length == 1) {
                return true;
            }
            // 统计所有字符的数量。所有字符的总数量应该为 length 的倍数，否则无法平均分配
            int allCharCount = 0;
            for (String word : words) {
                allCharCount += word.length();

            }
            if (allCharCount % length != 0) {
                return false;
            }
            // 统计每个字符的数量。每个字符的总数量均应该为 length 的倍数，否则无法平均分配
            int[] cnt = new int[26];
            for (String word : words) {
                for (char ch : word.toCharArray()) {
                    ++cnt[ch - 'a'];
                }
            }
            for (int count : cnt) {
                if (count % length != 0) {
                    return false;
                }
            }
            return true;
        }
    }
}
